# -*- coding: UTF-8 -*-
'''
@Project ：pythonProject 
@File    ：functionDemo7.py
@Author  ：siwei
@Date    ：2023/11/6 22:10 
@other   ：str.print---->print(str)
'''


# 递归函数:在一个函数的函数体内调用该函数本身
# 一个完整的递归操作由两部分组成,一部分是递归调用,一部分是递归终止条件,
# 一般可使用if-else结构来判断递归的调用和递归的终止

# 计算n的阶乘
def fac(n):  # n的阶乘: N!=N*(N-1)!...1!
    if n == 1:
        return 1  # n=1的时候结束
    else:
        return n * fac(n - 1)  # 自己调用自己


print(fac(4))  # 依次调用fac(4),fac(3),fac(2),fac(1).


# fac(1)的结果要提交给fac(2),fac(2)的结果要提交给fac(3),fac(3)的结果要提交给fac(4)
#  1*(((1*2)*3)*4) = 24
#  1是fac(1)的结果,1*2是fac(2)的结果,(1*2)*3是fac(3)的结果,((1*2)*3)*4是fac(4)的结果


# 斐波那契数列:又称黄金分割线.从第三项开始,每一项都等于前两项之和
# 例:1,1,2,3,5,8,13,21,34,55....
# f(n)=f(n-1)+f(n-2)

def fac2(n):
    if n == 1 or n == 2:  # 当第一项或第二项为1时结束
        return 1
    else:
        return fac2(n - 1) + fac2(n - 2)  # 每一项都等于前两项之和


print(fac2(9))  # 第九位上的数字

for i in range(1, 10):
    print(fac2(i), end='\t')  # 第i位上的数字
